[2025-07-15] Web-SSRF
๐ฆฅ ๋ณธ๋ฌธ
#!/usr/bin/python3
from flask import (
Flask,
request,
render_template
)
import http.server
import threading
import requests
import os, random, base64
from urllib.parse import urlparse
app = Flask(__name__)
app.secret_key = os.urandom(32)
try:
FLAG = open("./flag.txt", "r").read() # Flag is here!!
except:
FLAG = "[**FLAG**]"
@app.route("/")
def index():
return render_template("index.html")
@app.route("/img_viewer", methods=["GET", "POST"])
def img_viewer():
if request.method == "GET":
return render_template("img_viewer.html")
elif request.method == "POST":
url = request.form.get("url", "")
urlp = urlparse(url)
if url[0] == "/":
url = "http://localhost:8000" + url
elif ("localhost" in urlp.netloc) or ("127.0.0.1" in urlp.netloc):
data = open("error.png", "rb").read()
img = base64.b64encode(data).decode("utf8")
return render_template("img_viewer.html", img=img)
try:
data = requests.get(url, timeout=3).content
img = base64.b64encode(data).decode("utf8")
except:
data = open("error.png", "rb").read()
img = base64.b64encode(data).decode("utf8")
return render_template("img_viewer.html", img=img)
local_host = "127.0.0.1"
local_port = random.randint(1500, 1800)
local_server = http.server.HTTPServer(
(local_host, local_port), http.server.SimpleHTTPRequestHandler
)
def run_local_server():
local_server.serve_forever()
threading._start_new_thread(run_local_server, ())
app.run(host="0.0.0.0", port=8000, threaded=True)
- ์ฝ๋๋ง ๋ด์๋ FLAG๋ฅผ ๋ชฐ๋์ง๋ง ๊ฐ์ ํ์ผ์ flag.txt๊ฐ ์๋ ๊ฑธ ๋ณด๊ณ ssrf ๋ฐฉ์์ผ๋ก ๋ฐฑ์๋์์ flag.txt์ ์ ๊ทผํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
- static/dream.png๋ ์ ์ ๊ทผ๋๋ ๋ฐ flag.txt๋ ์ ๊ทผ์ด ์๋ผ์ ์๋ฌธ์ด์๋ค.
- ๊ทธ๋์ ์ฐพ์๋ณด๋ static ํด๋๋ 8000 ํฌํธ๋ก ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง flag.txt๋ ๋ด๋ถ๋ง์ ํตํด์ ์ ๊ทผํด์ผ ํ๋ค๋ ๊ฒ์ ์์๋ค. 1500~1800 ํฌํธ๋ก ์ ๊ทผํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์์ elif ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ฐ ip์ฃผ์ ํํฐ๋ง์ ํํผํ๋ ค๋ฉด ๋๋ฌธ์๋ฅผ ์ฐ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.
- 1500~1800 ํฌํธ ์ค ๋๋ค์ด๋ผ ๋ฌด์ฐจ๋ณ ๊ณต๊ฒฉ์ ํด์ผ ํ๋ค๊ณ ํ๋ค.
ํ์ด
- burf suite๋ฅผ ์ฌ์ฉํ๋ค.
- ํฌํธ๋ฅผ 1500-1800๊น์ง ๋ณด๋ด์๋ค.
length๊ฐ ๋ค๋ฅธ ํฌํธ๋ 1543์ด์๋ค. response๋ฅผ ํ์ธํ๋
src์ ๋ค๋ฅธ ๊ฐ์ด ๋ค์ด์์๊ณ ์ด๋ฅผ ๋์ฝ๋ฉํ๋ flag๋ฅผ ์ป์ ์ ์์๋ค.
Leave a comment